package arrays;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 题目： 求一个无重复元素数组里面的所有排列组合
 * y:[0,1,2]
 *   0 1 2
 *   0 2 1
 *   1 0 2
 *   1 2 0
 *   2 1 0
 *   2 0 1
 * @Author Gavin
 * @date 2021.12.09 21:16
 */
public class array_2 {
    public static List<List<Integer>> solution(int[] arrays){
        if(arrays==null||arrays.length==0)return new ArrayList<>();
        List<List<Integer>> result=new ArrayList<>();
        List<Integer> nums=new ArrayList<>();
        for (int pre:arrays)nums.add(pre);
        rec(nums,0,result);
        return result;
    }
    //递归调用
    private static void rec(List<Integer> nums,int start,List<List<Integer>> result){
        if(start==nums.size()){
            result.add(new ArrayList<>(nums));
        }else{
            for (int i=start;i<nums.size();++i){
                Collections.swap(nums,i,start);
                //这里需要好好理解，当start和某个元素交换之后，那么从下一个元素开始又可以当成一个新的数组来进行递归处理了
                //当然前提是需要该数组是无重复的元素，否则交换之后可能会出现重复
                rec(nums,start+1,result);
                Collections.swap(nums,i,start);
            }
        }
    }

    public static void main(String[] args) {}
}
